// 给定一个整数数组nums和一个目标值target，要求从nums中选出三个整数，使它们的和与target最接近，返回这三个数的和，假定每组输入只存在恰好一个解

// 思路，双指针法，排序，和上题解法一致
// 时间复杂度：O(n^2)
// 空间复杂度：O(1)

function threeSumClosest(arr, target) {
    let ans = Infinity
    arr.sort((a, b) => a - b)
    for (let i = 2; i < arr.length; i++) {
        let left = 0
        let right = i - 1
        while (left < right) {
            let sum = arr[left] + arr[right] + arr[i]
            if (Math.abs(sum - target) < Math.abs(ans - target)) {
                ans = sum
            }
            if (sum < target) {
                left++
            } else {
                right--
            }
        }
    }
    return ans
}

let nums = [-1, 2, 1, -4], target = 1
console.log(threeSumClosest(nums, target))